import { createStore } from 'vuex'
import user from './modules/user'
import activity from './modules/activity'
import category from './modules/category'

// 创建并导出store实例
export default createStore({
  // 全局状态
  state: {
    // 加载状态
    loading: false,
    // 错误信息
    error: null,
    // 成功信息
    success: null,
    // 是否移动端
    isMobile: /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)
  },
  
  // 计算属性
  getters: {
    isLoading: state => state.loading,
    hasError: state => !!state.error,
    errorMessage: state => state.error,
    hasSuccess: state => !!state.success,
    successMessage: state => state.success,
    isMobile: state => state.isMobile
  },
  
  // 同步修改状态
  mutations: {
    // 设置加载状态
    SET_LOADING(state, status) {
      state.loading = status
    },
    
    // 设置错误信息
    SET_ERROR(state, message) {
      state.error = message
      // 5秒后自动清除错误信息
      setTimeout(() => {
        state.error = null
      }, 5000)
    },
    
    // 清除错误信息
    CLEAR_ERROR(state) {
      state.error = null
    },
    
    // 设置成功信息
    SET_SUCCESS(state, message) {
      state.success = message
      // 5秒后自动清除成功信息
      setTimeout(() => {
        state.success = null
      }, 5000)
    },
    
    // 清除成功信息
    CLEAR_SUCCESS(state) {
      state.success = null
    },
    
    // 设置移动端状态
    SET_MOBILE(state, isMobile) {
      state.isMobile = isMobile
    }
  },
  
  // 异步操作
  actions: {
    // 显示加载状态
    showLoading({ commit }) {
      commit('SET_LOADING', true)
    },
    
    // 隐藏加载状态
    hideLoading({ commit }) {
      commit('SET_LOADING', false)
    },
    
    // 显示错误信息
    showError({ commit }, message) {
      commit('SET_ERROR', message)
    },
    
    // 显示成功信息
    showSuccess({ commit }, message) {
      commit('SET_SUCCESS', message)
    },
    
    // 清除错误信息
    clearError({ commit }) {
      commit('CLEAR_ERROR')
    },
    
    // 清除成功信息
    clearSuccess({ commit }) {
      commit('CLEAR_SUCCESS')
    },
    
    // 检查并设置移动端状态
    checkMobileStatus({ commit }) {
      const isMobile = /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)
      commit('SET_MOBILE', isMobile)
    }
  },
  
  // 模块化store
  modules: {
    user,
    activity,
    category
  }
})